package tcpVerbindung;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 
 * @author rs
 *
 * @version 1.1
 */
public class utils {
	
	private static int trennzeichen;

	/**
	 * 
	 * @param empfangen
	 * @param startZeichen
	 * @return ID des Strings
	 */
	public static int getID(String empfangen, String startZeichen) {
		StringBuffer sb = new StringBuffer(empfangen);

		trennzeichen = 0;

		trennzeichen = sb.indexOf(startZeichen);

		sb = sb.delete(0, trennzeichen + 1);

		trennzeichen = sb.indexOf(";");

		String id = sb.substring(0, trennzeichen);

		return Integer.parseInt(id);
	}

	/**
	 * Entfernt die ID vom Strings
	 * 
	 * @param empfangen
	 * @return String ohne ID
	 */
	public static String idEntf(String empfangen) {
		StringBuffer sb = new StringBuffer(empfangen);

		trennzeichen = 0;

		trennzeichen = sb.indexOf(";");

		sb = sb.delete(0, trennzeichen + 1);

		trennzeichen = sb.indexOf(">");

		return sb.subSequence(0, trennzeichen).toString();
	}

	/**
	 * 
	 * @param empfangen
	 * @param startZeichen
	 * @return
	 */
	public static String getDatenString(String empfangen, String startZeichen) {
		StringBuilder sb = new StringBuilder(empfangen);

		trennzeichen = 0;

		trennzeichen = sb.indexOf(startZeichen);

		sb = sb.delete(0, trennzeichen + 1);

		trennzeichen = sb.indexOf(">");

		return sb.subSequence(0, trennzeichen).toString();
	}

	/**
	 * 
	 * @param empfangen
	 * @return
	 */
	public static String getInt_To_Binary(String empfangen) {
		StringBuilder sb = new StringBuilder(empfangen);

		trennzeichen = 0;

		trennzeichen = sb.indexOf(";");

		String s = sb.subSequence(0, trennzeichen).toString();

		int wort = Integer.parseInt(s);

		return Integer.toBinaryString(wort);
	}

	/**
	 * 
	 * @param empfangen
	 * @return
	 */
	public static String getEntfDatensatz(String empfangen) {
		StringBuilder sb = new StringBuilder(empfangen);

		trennzeichen = 0;

		trennzeichen = sb.indexOf(";");

		sb = sb.delete(0, trennzeichen + 1);

		return sb.toString();
	}

	/**
	 * 
	 * @param io
	 * @return
	 */
	public static boolean[] getIo(String io) {
		boolean[] liste = new boolean[16];

		for (int i = 0; i < liste.length; i++) {
			liste[i] = false;
		}

		BigInteger ios = new BigInteger(io, 2);

		for (int i = 0; i < 16; i++) {
			liste[i] = ios.testBit(i);
		}

		return liste;
	}

	/**
	 * 
	 * @param daten
	 * @return
	 */
	public static int getStringToInt(String daten) {
		StringBuilder sb = new StringBuilder(daten);

		trennzeichen = 0;

		trennzeichen = sb.indexOf(";");

		String s = sb.subSequence(0, trennzeichen).toString();

		return Integer.parseInt(s);
	}

	/**
	 * 
	 * @param daten
	 * @return
	 */
	public static String getStringToString(String daten) {
		StringBuilder sb = new StringBuilder(daten);

		trennzeichen = 0;

		trennzeichen = sb.indexOf(";");

		if (trennzeichen < 0) {
			return "0";
		}

		return sb.subSequence(0, trennzeichen).toString();
	}

	/**
	 * 
	 * @param ip
	 * @param port
	 * @return
	 * @throws UnknownHostException
	 * @throws IOException
	 */
	public static Socket verbindungAufbauen(String ip, int port) throws UnknownHostException, IOException {
		Socket socket = new Socket(ip, port);
		return socket;
	}

	/**
	 * 
	 * @param socket
	 * @param laengeNachricht
	 * @return
	 * @throws IOException
	 */
	public static String datenEmpfangen(Socket socket, int laengeNachricht) throws IOException {
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		char[] buffer = new char[laengeNachricht];
		int anzahlZeichen = bufferedReader.read(buffer, 0, laengeNachricht);

		if (anzahlZeichen != -1) {
			String nachricht = new String(buffer, 0, anzahlZeichen);
			
			//System.out.println(nachricht);
			
			return nachricht;
		}
		return null;
	}

	/**
	 * 
	 * @param daten
	 * @param trennZeichen
	 * @return
	 */
	public static String[] datenSplit(String daten, String trennZeichen) {
		return daten.split(trennZeichen);
	}
}